package JZ_Offer.algorithm.other.数组;

import java.util.HashMap;


/**
 * 数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。
 * 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。
 * 由于数字2在数组中出现了5次，超过数组长度的一半，因此输出2。如果不存在则输出0。
 *
 * @Author piper
 * @Date 2019/12/26 4:10 下午
 */
public class JZ39_数组中出现次数超过一半的数字 {
    private static int MoreThanHalfNum_Solution(int[] array) {
        int half = array.length / 2 + 1;
        HashMap<Integer, Integer> map = new HashMap<>(array.length);
        for (int i = 0; i < array.length; i++) {
            int a = array[i];
            Integer alr = map.get(a);
            int alrr = alr == null ? 0 : alr;
            if (alrr == half - 1) {
                return a;
            }
            map.put(a, alrr + 1);
        }
        return 0;
    }

    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 2, 2, 2, 5, 4, 2};
        System.out.println(MoreThanHalfNum_Solution(arr));
    }
}
